package main

import (
	"fmt"
)

type Company interface {
	BuildProduct()
}
type CompanyA struct {
}

func (p *CompanyA) BuildProduct(typ, name string) *ProductBase {
	pb := new(ProductBase)
	pb.Init(typ, name)
	return pb
}

type Product interface {
	DoUse()
}

type ProductBase struct {
	Type	string
	Name    string
}

func (p *ProductBase) DoUse() {
	fmt.Printf("%s call me\n", p.Name)
}

func (p *ProductBase) Init(typ, name string) {
	p.Type = typ
	p.Name = name
}

func (p *ProductBase) GetName() string {
	return p.Name
}

func (p *ProductBase) SetName(name string) {
	p.Name = name
}

func (p *ProductBase) GetType() string {
	return p.Type
}

func (p *ProductBase) SetType(typ string) {
	p.Type = typ
}

func main() {
	fmt.Println("------程序开始运行------")
	c1 := new(CompanyA)
	p1 := c1.BuildProduct("A", "aaa")
	p1.DoUse()
	p2 := c1.BuildProduct("B", "bbb")
	p2.DoUse()
	fmt.Println("------程序结束运行------")
}



